
using System;
using System.Text;
using SpotifyGenNHibernate.CEN;
using NHibernate;
using NHibernate.Cfg;
using NHibernate.Criterion;
using NHibernate.Exceptions;
using SpotifyGenNHibernate.EN.Spotify;

namespace SpotifyGenNHibernate.CAD.Spotify
{
        public partial class AnuncioCAD : BasicCAD, IAnuncioCAD
        {
        public AnuncioCAD() : base ()
        {
        }

        public AnuncioCAD(ISession sessionAux) : base (sessionAux)
        {
        }



        public AnuncioEN ReadOIDDefault (int IdAnuncio)
        {
                AnuncioEN anuncioEN = null;

                try
                {
                        SesssionInitializeTransaction ();
                        anuncioEN = (AnuncioEN)session.Load (typeof(AnuncioEN),
                                IdAnuncio

                                );
                        SessionCommit ();
                }

                catch (Exception ex) {
                        SessionRollBack ();
                        if (ex is ModelException)
                                throw ex;
                        throw new DataLayerException ("Error in AnuncioCAD.", ex);
                }


                finally
                {
                        SessionClose ();
                }

                return anuncioEN;
        }


        public int CrearAnuncio (AnuncioEN anuncio)
        {
                try
                {
                        SesssionInitializeTransaction ();
                        if (anuncio.Usuario != null) {
                                for (int i = 0; i < anuncio.Usuario.Count; i++)
                                        anuncio.Usuario [i] = (SpotifyGenNHibernate.EN.Spotify.UsuarioEN)session.Load (typeof(SpotifyGenNHibernate.EN.Spotify.UsuarioEN), anuncio.Usuario [i].Nombre);
                        }

                        session.Save (anuncio);
                        SessionCommit ();
                }

                catch (Exception ex) {
                        SessionRollBack ();
                        if (ex is ModelException)
                                throw ex;
                        throw new DataLayerException ("Error in AnuncioCAD.", ex);
                }


                finally
                {
                        SessionClose ();
                }

                return anuncio.IdAnuncio;
        }

        public void BorrarAnuncio (int IdAnuncio)
        {
                try
                {
                        SesssionInitializeTransaction ();
                        AnuncioEN anuncioEN = (AnuncioEN)session.Load (typeof(AnuncioEN),
                                IdAnuncio

                                );
                        session.Delete (anuncioEN);
                        SessionCommit ();
                }

                catch (Exception ex) {
                        SessionRollBack ();
                        if (ex is ModelException)
                                throw ex;
                        throw new DataLayerException ("Error in AnuncioCAD.", ex);
                }


                finally
                {
                        SessionClose ();
                }
        }

        public void EscucharAnuncio (int p_Anuncio_OID, System.Collections.Generic.IList<String> p_usuario_OIDs)
        {
                SpotifyGenNHibernate.EN.Spotify.AnuncioEN anuncioEN = null;
                try
                {
                        SesssionInitializeTransaction ();
                        anuncioEN = (AnuncioEN)session.Load (typeof(AnuncioEN), p_Anuncio_OID);
                        SpotifyGenNHibernate.EN.Spotify.UsuarioEN usuarioEN = null;
                        if (anuncioEN.Usuario == null) {
                                anuncioEN.Usuario = new System.Collections.Generic.List<EN.Spotify.UsuarioEN>();
                        }

                        foreach (String item in p_usuario_OIDs) {
                                usuarioEN = new EN.Spotify.UsuarioEN ();
                                usuarioEN = (EN.Spotify.UsuarioEN)session.Load (typeof(EN.Spotify.UsuarioEN), item);
                                anuncioEN.Usuario.Add (usuarioEN);
                        }


                        session.Update (anuncioEN);
                        SessionCommit ();
                }

                catch (Exception ex) {
                        SessionRollBack ();
                        if (ex is ModelException)
                                throw ex;
                        throw new DataLayerException ("Error in AnuncioCAD.", ex);
                }


                finally
                {
                        SessionClose ();
                }
        }
        }
}
